perm filename ALS1[F8,ALS] blob sn#306686 filedate 1977-09-29 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00013 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	* Code to read the internal representation of the board and to put the
C00006 00003	SC locations used for certain variables
C00007 00004	* FKT  GMEN  RFJN  LFJN  STMV
C00011 00005	* NEXT  FIND  RFJ  LFJ  RBJ  LBJ
C00017 00006	* JUMT AFTC
C00021 00007	* AFT MAKE OKMV PMRT
C00024 00008	* RFN LFN RBN LBN NORT NORF NOR2 NOR3 NOR4
C00028 00009	* SELECT  SELE
C00033 00010	* JUMP
C00039 00011	* NORM  FORE
C00041 00012	* EVAL
C00045 00013	* BOOK
C00048 ENDMK
CāŠ—;
* Code to read the internal representation of the board and to put the
* required pieces into the board image.
*
MEN	LISU	O'3'		Start with pieces
	LIS	H'1'		1 for red pieces (shown first always)
	LR	4,A		To specify piece color (1 red, 0 black, -1 king)
	LR	A,COL0
	LR	7,A
	NS	7		Set status
	LISL	O'7'		Decrement if black is active and shift right
	BZ	MEN1		Black is active (Appears at bottom of screen)
	LISL	O'0'		Red is active, increment and shift left
MEN1	LIS	H'3'
	LR	1,A		To count bytes
MEN2	LR	K,P
	LIS	H'7'
	LR	2,A		To count bits
	DCI	TAB1		STARTING ADDRESS FOR BYTE LOCATION
	LR	A,1		This byte number
	SL	1		Locations occupy 2 bytes each
	ADC
	LM			Get the location
	LR	QU,A		and save it in Q
	LM
	LR	QL,A
	LR	A,7
	NS	7
	BZ	MEN5		Black is active
	LR	A,I		Increment if red is active
	BR	MEN4
MEN3	LR	A,3
	SL	1		and shift left
MEN4	LR	3,A
	NI	H'80'		(done this way for symetry, BC would work)
	BZ	MEN9
	BR	MEN8
MEN5	LR	A,D		Decrement if black is active
	BR	MEN7
MEN6	LR	A,3
	SR	1		and shift right
MEN7	LR	3,A
	NI	H'1'
	BZ	MEN9
MEN8	DCI	TAB2		Relative-locations-of-squares table
	LR	A,2		This square
	ADC
	LM			Get square displacement
	LR	DC,Q		Recall the location for the input byte
	ADC			This is the square position
	LR	A,4		Identify type of piece
	NS	4
	BM	PUTK		To put down a king
	LIS	H'4'		Prepare for a piece
	LR	5,A		To count lines
	LI	H'20'		Skip the first 4 lines (4*8)
	ADC
	XDC
	DCI	BLKP		Anticipate a black piece
	BZ	PUTL		A black piece (status bit still ok)
	DCI	REDP		No, it's a red piece
	BR	PUTL
PUTK	LIS	H'2'		Only 3 lines for a crown
	LR	5,A
	LIS	H'8'		To skip 1 line
	ADC
	XDC
	DCI	KING
PUTL	LM			Put loop
	XDC
	ST
	LIS	H'7'		To next line on screen (less increment)
	ADC
	XDC
	DS	5
	BP	PUTL		Loop
MEN9	DS	2
	BM	ME10
	LR	A,7
	NS	7
	BZ	MEN6		Black active case
	BR	MEN3		Red active case
ME10	DS	1
	BP	MEN2		For the next input byte
	LR	A,4
	NS	4
	BM	BDEX		Exit from board routine
	DS	4
	BP	MEN1		Go round again for black pieces
	LISU	H'4'		Get set for kings
	LR	A,7
	NS	7
	LISL	H'3'		Decrementing case
	BZ	MEN1
	LISL	H'0'		Incrementing case
	BR	MEN1
BDEX	PK
*
SC locations used for certain variables

PLY0	EQU	O'60	Player's depth choice
PLY1	EQU	O'61	Current ply level
COL0	EQU	O'62'	Player's color choice
COL1	EQU	O'63'	Color at current level

NOTE: These are used insead of RAM locations to save time and code
* FKT  GMEN  RFJN  LFJN  STMV
*
*Subroutine to limit pieces to KINGS depending on direction and color
FKT	LR	K,P
	CLR
	AS	7
	BR	FK1
BKT	LR	K,P
	LR	A,7		Test sides for backward move
	COM
FK1	BZ	FK2		NORMAL pieces can move
	LISU	KLOC		KINGS only can move
	LR	A,S
	NS	3
	LR	3,A
	BZ	FK3		No RF OR LF moves from this byte
FK2	LR	A,3
	NS	3		To set status
FK3	PK
*
FJET	LR	K,P
	LIS	H'1'
	BR	BJE2
BJET	LR	K,P
	LI	H'FF'
BJE2	AS	4
	AI	ISE
	LR	IS,A
	LR	A,S
	PK
*
*Subroutine to get byte of ACTIVE pieces
GMEN	LR	K,P
	LR	A,4
	AI	ISA		Start of active area
	LR	IS,A
	LR	5,A		Save it here temporarily
	LR	A,6
	CI	H'7'		Is this an attempted continuation?
	BZ	GME2		Yes, 3 is already set
	CI	H'1'		Maybe back up to test for forked continuation
	BZ	GME2
	LR	A,S
	LR	3,A
GME2	PK
*
*Subroutine used both by RFJ and RFN
RFJN	LR	K,P
	LR	A,I
	SL	4
	LR	0,A
	LR	A,S
	SR	4
	SR	1
	AS	0
	NS	3
	LR	3,A		The RFJ or RJ byte
	PK
*
*Subroutine used both by LFJ and LFN
LFJN	LR	K,P
	LR	A,I
	SL	4
	SL	1
	LR	0,A
	LR	A,S
	SR	4
	AS	0
	NS	3
	LR	3,A		The LFJ or LFN byte
	PK
*
*Subroutine used both by LBJ and LBN
LBJN	LR	K,P
	LR	A,D
	SL	4
	LR	0,A
	LR	A,S
	SR	4
	SR	1
	AS	0
	NS	3
	LR	3,A
	PK
*
*Subroutine used both by RBJ and RBN
RBJN	LR	K,P
	LR	A,D
	SL	4
	SL	1
	LR	0,A
	LR	A,S
	SR	4
	AS	0
	NS	3
	LR	3,A
	PK
*Subroutine to add to MOBILITY, and to store MOVE and FLAG bytes if necessary
STMV	LR	K,P
	LISU	KLOC
	LISL	4		To MOVE byte
	LR	A,3		GET newly computed MOVE byte
	LR	0,A
	PI	CAQ		Count its bits
	AS	2		Add earlier counts
	LR	2,A		and store
	LR	A,11
	SR	4
	CI	H'01'		Is this the player's board
	BNZ	STM3
	DCI	PLMV		Player's possible moves are stored separately
	LM
	INC
	INC			Entries take two bytes
	DCI	PLMV
	ST
	AI	H'FE'		Subtract 2
	ADC
	BR	STM4
STM3	LR	A,S		Has a move byte been stored?
	NS	S		To set status byte
	BNZ	STM2		One is already stored
	LR	DC,H		Get back in step (may not be necessary)
	LIS	H'C'		To get to MOVE byte
	ADC
STM4	LR	A,3
	ST			Store MOVE byte in RAM
	LR	I,A		Also put it in SC record as a flag
	LR	A,4		Get the byte pointer
	SL	1
	SL	1
	AS	5
	ST			Put this into RAM
	LR	DC,H		May be necessary
STM2	PK
*Subroutine to clear space for listing player's possible moves temporarily
CLPM	LR	K,P
	XDC
	DCI	PLMV		This space is also used by TREE routine
	LIS	H'F'
	LR	0,A
	CLR
	ST
	DS	0
	BP	*-2
	XDC
	PK
* NEXT  FIND  RFJ  LFJ  RBJ  LBJ
*
NEXT	CLR
	LR	6,A		Set for normal back up
	LR	DC,H
	LIS	H'D'		Get to byte number info
	ADC
	LR	A,11		Check for multiple jump condition
	SR	4
	AI	H'FD'		1 for start offset, 2 ply's Mobs. not saved
	BM	NEX2		Can not be a continuation
	XDC			Save location
	DCI	MOBS
	ADC
	LM
	NI	H'7'		Is flag set?
	XDC
	BZ	NEX2		No multiple jump
*The moving piece byte and byte number is stored in the next earlier block
	XDC
	LR	DC,H
	LI	H'FC'		Back up to get info
	ADC
	LM
	LR	3,A		The byte with 1 bit on
	LM
	LR	4,A		The byte number
	XDC			Now back again to the current block
	LIS	H'1'		The signal read by GMEN
	LR	6,A		Overwrite previously set value
NEX2	LM			Get identifying data
	LR	0,A		Save temporarily
	NI	H'F'		Leave J bit and other data off
	CI	H'F'		Is this the last move byte?
	BZ	NEX5		Yes
	LR	A,0
	INC			To next  direction
	LR	0,A
	SR	1
	SR	1
	NI	3
	LR	4,A		Save byte number
	LR	A,0		Now get the direction
	NI	3		Separate out desired data
	LR	5,A		And save  (it will be a 1, 2, or 3)
	LR	A,0
	NI	H'10'		Check jump bit
	BNZ	NEX4		A jump move
	LR	A,5
	NS	5
	BZ	NEX3
	JMP	RBN0		A normal move, decide on 1, 2, or 3 later
NEX3	JMP	RFN		It was 0
NEX5	JMP	AFT
NEX4	LR	A,5
	NS	5
	BZ	RFJ		It was a 0
	CI	H'2'		Which direction, 1, 2, or 3?
	BM	LBJ		It was a 3
	BNZ	LFJ		It was a 1
	BR	RBJ		It was a 2
*We enter here on going forward
FIND	LISU	PLOC
	LISL	0		Start with byte 0
	CLR
	LR	4,A		Used to distinguish byte
	LR	2,A		Used to accumulate mobility count by STMV
	LI	H'FF'
	LR	6,A		So all moves will be found
RFJ	PI	GMEN
	PI	FKT		Are there forward moving pieces?
	PI	FJET		Are jump moves in this direction posible?
	SR	1
	NI	H'77'		Save 6 particular bits only
	NS	3
	LR	3,A		Only pieces that have place to land
	LR	A,4		Get byte number
	AI	ISP		Start of passive area
	LR	IS,A
	PI	RFJN		This returns the RFJ byte in 3 and sets STATUS
	BZ	LFJ
	LI	H'10'		The RFJ direction and J indicator
	LR	5,A
	PI	STMV		Store MOVE and FLAG if MOVE found
	BR	JUMF
LFJ	PI	GMEN
	PI	FKT
	PI	FJET		Are jump moves in this direction posible?
	SL	1
	NI	H'EE'		Save 6 particular bits only
	NS	3
	LR	3,A		Only pieces that have a place to land
	LR	A,4		Get byte number
	AI	ISP		Start of passive area
	LR	IS,A
	PI	LFJN		This returns the LFJ byte in 3
	BZ	RBJ
	LI	H'11'		The LFJ direction and J indicator
	LR	5,A
	PI	STMV
	BR	JUMF
RBJ0	LR	A,5
	CI	H'2'		Which direction, 1, 2, or 3?
	BM	LBJ		It was a 3
	BNZ	LFJ		It was a 1
RBJ	PI	GMEN
	PI	BKT
	PI	BJET
	SR	1
	NI	H'77'		Save 6 particular bits only
	NS	3
	LR	3,A
	LR	A,4		Get byte number
	AI	ISP		Start of passive area
	LR	IS,A
	PI	RBJN		This returns the RBJ byte in 3
	BZ	LBJ
	LI	H'12'		The RBJ direction and J indicator
	LR	5,A
	PI	STMV
	BR	JUMF
LBJ	PI	GMEN
	PI	BKT
	PI	BJET
	SL	1
	NI	H'EE'		Save 6 particular bits only
	NS	3
	LR	3,A
	LR	A,4		Get byte number
	AI	ISP		Start of passive area
	LR	IS,A
	PI	LBJN		This returns the RBJ byte in 3
	BZ	JUMT
	LI	H'13'		The RBJ direction and J indicator
	LR	5,A
	PI	STMV
JUMF	LR	A,11		Where are we?
	SR	4		To get the ply
	CI	H'1'		Remember offset
	BNZ	JUMD
	JMP	PMRT		Check players move for validity
JUMD	CI	H'F'		Are we out of space? (next block contains MOBS)
	BZ	RFN		To compute non-jump mobility and stop anyway
	LR	DC,H
	JMP	SELE
* JUMT AFTC
*
*No move found from this byte so see if there are more bytes
JUMT	LR	A,6
*Are we backing up and then trying to find yet another continuation?
	CI	H'1'		Are we backing up to a possible fork
	BZ	AFTC		Yes so something special is required
	CI	H'7'		Were we trying to find a continuation
	BNZ	JUMM		No
	LR	DC,H		There was no continuation
	LI	H'F0'		Back up
	ADC
	LR	H,DC
	JMP	DOUX		This changes the color and proceeds
JUMM	LR	A,4
	INC
	NI	H'3'
	LR	4,A
	BNZ	RFJ		Go round again for next byte
	LR	A,6
	XI	H'FF'
	CLR
	LR	4,A		Prepare to start over on the first byte
	BZ	RFN		Maybe there are normal moves
	JMP	AFT		A jump was demanded so back up
*We compare the score with that 2 blocks earlier and back it up if greater
*and then back to this level in any case
AFTC	LR	DC,H		We are here
	LIS	H'E'		Get score values
	ADC
	LM
	LR	0,A		Save them to complare
	LM
	LR	1,A
	LI	H'D0'		Actually backing only 2
	ADC
	LR	H,DC		We back up always
	LIS	H'E'		Get to score location
	ADC
	LR	A,0		Now compare score
	CM
	BM	AFT2		Back score for sure
	BNZ	AFT5		Do not back score
	LR	A,1		A further comparison is necessary
	CM
	BP	AFT5		Do not back after all
AFT2	LR	DC,H		Resetting is easier
	LIS	H'E'
	ADC
	LR	A,0		Back up the score
	ST
	LR	A,1
	ST
	LR	A,11		Where are we?
	SR	4
	CI	H'3'		Do we need to save board as possible move?
	BNZ	AFT5		No, at some other level in the tree
	LR	A,0		Invert score for compaarison
	COM
	INC
	LR	0,A
	LR	A,1		Invert score
	COM
	INC
	LR	1,A
	LR	DC,H
	LI	H'FE'		Back to earlies score
	ADC
	LR	A,0
	CM
	BM	AFT3		Board should be saved
	BNZ	AFT5		It should not be saved
	LR 	A,1
	CM
	BP	AFT5		Don't save after all
*Special treatment is necessary to prevent the saving of the
*intermediate board position of the multiple jump at a later time
*We do this by backing the score now
AFT3	LR	DC,H
	LI	H'FE'
	ADC
	LR	A,0		First back score now
	ST
	LR	A,1
	ST
	DCI	TREE		Location to save board
	XDC
*
*NOTE: This is fixwd for a double jump but some additional code
*may still needed for a triple jump!
*
	LR	DC,H
	LI	H'10'		Double jump resulting board
	ADC
	LR	0,A		Counter
AFT4	LM			Now save the board
	XDC
	ST
	XDC
	DS	0
	BNZ	AFT4
	LR	DC,H		Reset
AFT5	JMP	SELE
* AFT MAKE OKMV PMRT
*
*No moves found so time to back up
AFT	LR	DC,H
	LIS	H'E'		Get to SCORE
	ADC
	LM
	LR	0,A		The current material advantage term
	LM
	LR	6,A		The current positional term
	LR	A,11		Where are we?
	SR	4
	CI	H'2'
	BZ	MAKE		Time to report move
	CI	H'3'		Room to alpha-beta prune?
	BP	AFTX		No
	LR	DC,H
	LI	H'EE'		The score for 2 boards earlier
	ADC
	JMP	EV4A
AFTX	JMP	EVA5
*
*Prepare for analysis of player's reply
MAKE	DCI	TREE		Get to players board
	LR	H,DC
	XDC			Now clear space for possible players moves
	DCI	PLMV		This space is also used by TREE routine
	LIS	H'F'
	LR	0,A
	CLR
	ST
	DS	0
	BP	*-2
	XDC
	PI	RASC		Put board into SC
	JMP	FIND
*Subroutine to save players possible moves
SVPM	LR	K,P
	XDC			So we can get back
	LR	A,5
	NI	H'10'
	DCI	PLMF		Players jump move flag
	ST
	LR	A,4
	SL	1
	SL	1
	AS	5
	NI	H'F'		Save only last 4 bits
	DCI	PLMV		This area may be overwritten by tree info.
	ADC
	LR	A,3
	ST
	XDC
	PK
PMRT	NOP			Player's possible moves have been listed
*We are ready to display the new board
**** DISPLAY CODE GOES IN HERE

*We are ready to verify players move
OKIT	DCI	PLMV		Location where players move began
**** INIT JOYSTICK and wait for players indication that he has picked
***piece to move then go to OKPI and then to OKMV
* RFN LFN RBN LBN NORT NORF NOR2 NOR3 NOR4
*
RFN	PI	GMEN
	PI	FKT
	BZ	RBN
	LR	A,4		Get byte number
	AI	ISE		Start of empty region
	LR	IS,A
	PI	RFJN
	BZ	LFN
	CLR
	LR	5,A
	PI	STMV
	LR	A,6
	XI	H'FF'
	BNZ	NORF
LFN	PI	GMEN
	PI	FKT
	BZ	RBN
	LR	A,4		Get byte number
	AI	ISE		Start of empty region
	LR	IS,A
	PI	LFJN
	BZ	RBN
	LIS	H'1'
	LR	5,A
	PI	STMV
	LR	A,6
	XI	H'FF'
	BNZ	NORF
	BR	RBN
RBN0	LR	A,5
	CI	H'2'		Which direction, 1, 2, or 3?
	BM	LBN		It was a 3
	BNZ	LFN		It was a 1
RBN	PI	GMEN
	PI	BKT
	BZ	NORT
	LR	A,4		Get byte number
	AI	ISE		Start of empty region
	LR	IS,A
	PI	RBJN
	BZ	NORT
	LIS	H'2'
	LR	5,A
	PI	STMV
	LR	A,6
	XI	H'FF'
	BNZ	NORF
LBN	PI	GMEN
	PI	BKT
	BZ	NORT
	LR	A,4		Get byte number
	AI	ISE		Start of empty region
	LR	IS,A
	PI	LBJN
	BZ	NORT
	LIS	H'3'
	LR	5,A
	PI	STMV
	LR	A,6
	XI	H'FF'
	BZ	NORT
NORF	JMP	SELE
*We get here if we want to compute mobility and also if no moves found
NORT	LR	A,4
	INC
	NI	H'3'
	LR	4,A
	BNZ	RFN		Go round again for next byte
	LR	A,2		Get mobility count
	NS	2
	BNZ	NOR1
	JMP	AFT		Woops! no move found
NOR1	LR	A,11		Where are we?
	SR	4		Get Ply number
	AI	H'FF'
	LR	3,A
	BNZ	NOR2
	JMP	PMRT		Ckeck players move for validity
NOR2	DCI	PLY0		Player's choice of ply
	LM
	LR	DC,H		Reset DC
	CS	3
	BM	NOR4		Go on for sure
	BNZ	NOR3		Stop in this case
	LI	H'F5'		Decision based on previous move
	ADC
	LM
	NI	H'10'		Test jump flag
	LR	DC,H
	BNZ	NOR4		Go on if previous move was a jump
NOR3	JMP	EVAL
NOR4 	LR	A,3
NOR5	AI	H'FD'		To save space so MOBS will not overflow
	BM	NOR7		Don't save mobility for early plys
	DCI	MOBS
	ADC
	LR	A,2
	CI	H'F'		Limit mobility to 15 so it will pack
	BP	NOR6
	LIS	H'F'
NOR6	SL	4		Reserve right half for Multiple jump flags
	ST			Save mobility in MOBS space indexed by ply
NOR7	LR	DC,H		Get back in step
	JMP	SELE
* SELECT  SELE
*
*SELECT branches to NEXT if MOVE is empty, or it extracts the rightmost
*bit from the MOVE byte in RAM, storing the extracted bit in SC 6, puts the
*FLAG byte in SC 7, the byte number in 4, and the J and direction bits in 5.
*and proceeds to make the selected move.
SELE	LR	DC,H		Load DC  with starting location for current ply
	PI	RASC		Get board data into Scratchpad
SEL2	LR	DC,H
	LIS	H'C'		To get MOVE byte
	ADC
	LM
	LR	0,A		Save it temporarily
	NS	0		To set status byte
	BNZ	SEL3
	JMP	NEXT		To get next MOVE byte
SEL3	LI	H'FF'
	ADC			Get back to move byte
	LR	A,0
	AI	H'FF'		Really subtracting 1
	NS	0		Remove right-most on-bit
	ST			Put remaining bits back (and index)
	XS	0		This gets the extracted bit
	LR	6,A		Save it in 6
**** A record of the serial number of this move should be kept for ply 0
**** and put with the resulting board, for use in identifying path for book moves.
	LM			Now get the byte designation
SEL4	LR	5,A
	SR	1
	SR	1
	NI	H'3'		Separate the byte indicator part
	LR	4,A		Save it in 4
	LR	A,5
	NI	H'13'		Separate the JUMP bit and the direction
	LR	5,A		Save them in 5
	
*Now process ACTIVE and KINGS for source deletion
DELE	PI	GMEN
	XS	6		Delete moving piece
	LR	S,A		from byte
	LISU	KLOC		To get to corresponding KING byte
	LR	A,S
	NS	6		Was the piece a king?
	BZ	DEL2
	XS	S		If it was delete king bit
	LR	S,A
	LIS	H'7'		Non-zero in 2 for king 
DEL2	LR	2,A		Save as a flag for kind of piece moving
*Now locate captured piece if jump or find destination in normal move
	LR	A,6		Recall MOVE bit
	SR	4
	BZ	INRH		Bit was in right half of byte
INLH	LR	3,A		Save partially shifted MOVE bit
	LR	A,5		Get direction
	NI	H'1'		To test right-most bit
	BZ	INL2		RF or LB move where 4 shift is correct
	LR	A,3
	SR	1		LF and LB require an additional shift
	LR	3,A
INL2	LR	A,5		Now test for fore or aft
	NI	H'2'
	BZ	BOTH		Forward move, no byte shift needed
	LR	A,D		Only to decrement ISAR
INL3	BR	BOTH
*
INRH	LR	A,6		Get MOVE bit again
	SL	4		Left shift if in right half
	LR	3,A		Save partially shifted MOVE bit
	LR	A,5		Get direction
	NI	H'1'
	BNZ	INR2		LF or RB wwhere 4 shift is correct
	LR	A,3
	SL	1		RF and RB require an additional shift
	LR	3,A
INR2	LR	A,5		Now test fore and aft
	NI	H'2'
	BNZ	BOTH
	LR	A,I		Only to increment ISAR
*Now we are ready to decide if jump or not
BOTH	CLR
	LR	0,A		Used temporarily to accumulate piece debit
	LR	A,5		Now is this a jump or a normal move?
	SR	4
	BNZ	BOT1
	JMP	NORM		It's a normal move
BOT1	JMP	JUMP
* JUMP
*
JUMP	LR	A,S		Get King Byte corresponding to captured piece
	NS	3		Was piece a king?
	BZ	JUM1		No
	XS	3		Delete it
	LR	S,A		And replace byte
	LR	A,0
	INC			Count 1 extra for king
	LR	0,A
JUM1	LIS	H'2'
	AS	0		Count 2 for piece capture
	LR	0,A
	LISU	PLOC		Get back to right buffer for ACTI and PASS
	LR	A,IS
	AI	4		Increment to PASSIVE byte
	LR	IS,A
	LR	A,S		Get appropiate PASSIVE byte
	XS	3		Delete capture
	LR	S,A		And return byte
	LISU	PLOC		Back to moved-from location
	LISL	0
	LR	A,IS
	AS	4		Byte number is in 4
	LR	IS,A
	LR	A,5		Get direction
	NI	H'1'		Test for right or left
	BZ	JUM2		
	LR	A,6		It's to the left
	SR	1		Left moves involve a right shift of 1
 	BR	JUM3
JUM2	LR	A,6		It's to the right
	SL	1		Right moves involve a left shift of 1
JUM3	LR	3,A		Save displaced bit in 3
	LR	A,5
	NI	H'2'		Test for fore or aft
	BZ	JUM4		Fore move
	LR	A,D		Decrement ISAR (destination always in next byte)
	LR	A,4
	AI	H'FF'		Correct to destination byte number
	LR	A,2		Was the piece a king?
	NS	2
	BNZ	JUM6		Yes, so not necessary to test for a promotion
	LR	A,IS		Backward non-king must be white
	CI	O'30'		Is this WHITE's king row
	BNZ	JUM7		No, so there may still be a double jump
	BR	JUM5		Promotion indicated, so no double jump possible
JUM4	LR	A,I		Increment ISAR
	LR	A,4
	AI	H'1'		Correct to destination byte number
	LR	4,A		We'll need this for continuation
	LR	A,2		Was the piece a king?
	NS	2
	BNZ	JUM6		Yes, so not necessary to test for promotion
	LR	A,IS		Forward non-king must be black
	CI	O'33'		Is this BLACK's king row
	BNZ	JUM7		No, so there may still be a double jump
*Promotion indicated, do it and set 2 to flag bypass of double jump prepare
JUM5	LIS	H'1'		Non-zero (but not 7) for promotion
	LR	2,A		It is so promote piece
	LR	A,0
	INC			Add 1 to debit account
	LR	0,A
JUM6	LR	A,S		Now get right byte
	AS	3		Insert piece
	LR	S,A
	LR	A,IS		Prepare to deposit king
	AI	7		Go to correct king byte
	LR	IS,A
JUM7	LISL	4		Get to piece debit position
	LR	A,S
	SR	4		Note that right part is zero'ed
	SR	1
	AS	0
	CI	H'7'		Limit size to 7
	BP	JU7M
	LI	H'7'
JU7M	SL	4
	SL	1
	LR	S,A
	LR	A,2	
	CI	H'1'		Was it by promotion?
	BZ	JUM9		It was, so no double jump prepare
*Now we must anticipate a forked double jump
*See the detailed explanation of multiple jumps on page 3.
	LR	DC,H		Do not advance H yet
	LI	H'20'		Copy data two blocks forward
	ADC
	LISU	PLOC
	LISL	0
	LIS	H'8'
	LR	0,A
	PI	SCRL		Active and passive pieces
	LISU	KLOC
	LISL	0
	LIS	H'4'
	LR	0,A
	PI	SCRL
	LIS	H'4'
	LR	0,A
	LR	Q,DC
	XDC
	LR	DC,Q
	LI	H'E0'		Last 4 bytes come from current RAM data
	ADC
JUM8	LM
	XDC
	ST
	XDC
	DS	0
	BNZ	JUM8
*Now save the board in anticipation of no double jump
JUM9	LR	DC,H		(Do not yet advance H)
	LI	H'10'
	ADC
	PI	SCRA
*Now look into double jump situation
	LR	A,2
	CI	H'1'		Was there a promotion?
	BNZ	DOUB		No, so may be a double jump
	LR	DC,H		Finally ready to advance H
	LI	H'10'
	ADC
	LR	H,DC
*We get here from FIND (with H reset) if no continuation possible
DOUX	LR	A,7
	COM
	LR	7,A
	JMP	FIND
DOUB	LR	DC,H		Advance H by 2
	LI	H'1C'
	ADC
	LR	A,3		Needed if continuation is successful
	ST			It will be overwritten if not
	LR	A,4
	ST
	LR	DC,H
	LI	H'20'
	ADC
	LR	H,DC
	LR	A,11
	SR	4
	XDC
	DCI	MOBS
	AI	H'FD'		stored back by 3
	ADC			Will never be too early
	LIS	H'F'		Used to signal a continuation
	LR	6,A
	ST			Set continuation signal
	XDC			get back
	PI	RASC		Load scratchpad
	JMP	RFJ
* NORM  FORE
*
*Now make normal move
NORM	LISU	PLOC		Get back to Active pieces
	LR	A,S
	AS	3
	LR	S,A		Put in moved piece
	LR	A,2		Was it a king
	NS	2
	BNZ	NOM6		Yes so don't promote but do put king down
	LR	A,5
	NI	H'2'		Test for direction
	BZ	NOM4		Black is active
	LR	A,IS
	CI	H'30'		Did it get to the white king row?
	BZ	NOM5		Yes, so promote
	BR	FORE
NOM4	LR	A,IS		Black is active
	CI	H'33'		Did it get to the king row?
	BNZ	FORE		No
NOM5	LIS	H'1'
	LR	0,A
NOM6	LISU 	KLOC		Now get to king byte
	LR	A,S		Get corresponding king byte for destination
	AS	3		Insert king
	LR	S,A		And replace byte
	LR	A,0
	NS	0
	BZ	FORE
	LISL	4		Now fix the piece debit
	LR	A,S
	SR	4
	SR	1
	INC
	CI	H'7'
	BP	NOM7
	LI	H'7'
NOM7	SL	4
	SL	1
	LR	S,A
FORE	LR	DC,H
	LI	H'10'
	ADC			To next board record
	LR	H,DC
	PI	SCRA		Save newly created board record
	LR	A,7
	COM			Reverse color
	LR	7,A
	PI	RASC		Get correct board into SC
	JMP	FIND
* EVAL
*
EVAL	LR	A,11		We'll need the ply value
	SR	4
	AI	H'FF'
	LR	5,A		We'll need it again
	AI	H'FD'		MOBS indexes 2 less and we want one earlier
	LR	DC,H
	ADC
	LM			Get earlier mobility
	SR	4		It was shifted to pack
	COM
	INC
	AS	2		Add current mobility
	CI	H'7'		Difference limited to absolute 7
	BP	EVAA
	LI	H'7'
EVAA	CI	H'F9'
	BM	EVAB
	LI	H'F9'
EVAB	SL	4		Make room for ply term
	LR	6,A		Save difference (and free 2)
*Now look to the first term
	LR	DC,H		Make sure this is correct
	LIS	H'C'		To get current board piece debit
	ADC
	LISU	KLOC
	LISL	5		To  get previous board piece debit
	LR	A,I		
	SR	4
	SR	1
	LR	2,A		Piece credit for ACTIVE
	LM			Now the current board
	SR	4
	SR	1
	LR	1,A		Piece credit for PASSIVE
	LR	0,A		Save it twice
	COM
	INC		Make it a true negation
	AS	2
	LR	4,A		Save for its sign
	BZ	EVA7		No material advantage
	BP	EVA2
	COM		
	INC		Make it a true negation
	LR	1,A
	LR	A,0		This was the larger
	LR	2,A
EVA2	LR	A,2
	AI	2		Increase larger by 2
	LR	2,A	
	PI	MPYR		Multiply  2 by 1
	LR	A,4
	NS	4
	BP	EVA3
	LR	A,0
	COM			Note not true negation
	INC
	LR	0,A		The Piece score
	LR	A,5
	BR	EVA4
EVA3	LR	A,5
	COM
	INC
EVA4	AS	6		Add in the mobility term
	LR	6,A		Completed positional term
	LR	A,5
EV4A	CI	H'2'		Are we far enough along to be able to prune?
	BP	EVA5		No
EV4B	LR	A,0		Now get material advantage term back
	CM			Compare with value brought forward 2 levels
	BM	EVA5		Can not alphe-beta prune
	BNZ	EVA9		In this case we can for sure
*We have to compare second score terms in this case
	LR	A,6
	CM
	BP	EVA9		We can prune
EVA5	LR	DC,H		Otherwise back 1 level
	LI	H'F0'
	ADC
	LR	H,DC
	LIS	H'E'
	ADC
	LR	A,0
	COM
	INC
	CM	
	BM	EVA6		Back score for sure
	BNZ	EVA8		Do not back score for sure
	LR	A,6
	COM
	INC
	CM
	BP	EVA8		Do not back score
EVA6	LR	DC,H
	LIS	H'E'
	ADC			Get back to first score term
	LR	A,0
	COM
	INC
	ST
	LR	A,6
	COM
	INC
	ST
	LR	A,5		Where are we?
	CI	H'1'		(5 has already been decremented)
	BNZ	EVA8		Not going back to the first board
	LR	DC,H
	LI	H'F0'
	ADC
	XDC
	LI	H'20'
	ADC
	LI	H'10'		Prepare to save this board
	LR	0,A
EVA7	LM
	XDC
	ST
	XDC
	DS 0
	BNZ	EVA7
EVA8	LR	DC,H
	JMP	SELE
EVA9	LR	DC.H
	LI	H'E0'		Back 2
	ADC
	LR	H,DC
	JMP	SELE
* BOOK
*Code to read stored book moves
*
BOOK	DCI	TREE
	LR	H,DC
	XDC
	DCI	STOR

*Opening move table (choice to be made by a random number from 0 thru 7
BOK1	DC	H'01'	12-16, 11-15
	DC	H'23'	10-14,  9-13
	DC	H'45'	11-16, 10-15
	DC	H'61'	 9-14, 11-15
*First replies (maximum of 4 each)
BOK2	DC	H'33'	24,20  24-20	To 12-16
	DC	H'33'	24-20, 24-20
BOKB	DC	H'43'	23-19, 24-20	To 11-15
	DC	H'20'	22-17, 24-19
BOKC	DC	H'22'	22-17, 22-17	To 10-14
	DC	H'22'	22-17, 22-17
BOKD	DC	H'55'	22-18, 22-18	To  9-13
	DC	H'55'	22-18, 22-18
BOKE	DC	H'31'	24-20, 23-18	To 11-16
	DC	H'45'	24-19, 22-18
BOKF	DC	H'66'	21-17, 21-17	To 10-15
	DC	H'66'	21-17, 21-17
BOKG	DC	H'55'	22-18, 22-18	To  9-14
	DC	H'55'	22-18, 22-18
*First counter replies (maximum of 2 each)
BOK3	DC				To 12-16 24-19
	DC				To 12-16 23-18
	DC				To 12-16 22-17
	DC	H'00'	 8-12,  8,12	To 12-16 24-20
	DC	H'00'	16-23, 16,23	To 12-16 23-19
	DC				To 12-16 22-18
	DC				To 12-16 21-17
	DC	H'00'	15-24, 15-24	To 11-15 24-19
	DC	H'00'	 8-11,  8-11	To 11-15 23-18
	DC	H'60	 9-13,  8-11	To 11-15 22-17
	DC	H'00'	 8-11,  8-11	To 11-15 24-20
	DC	H'05	 8-11,  9-14 	To 11-15 23-19
	DC	H'00'	15-22, 15-22	To 11-15 22-18
	DC				To 11-15 21-17
**** THERE WILL BE 49 BYTES OF THESE, EACH WITH 2 COUNTER REPLIES
**** The ones listed at present are from Lee's Guide